<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 首先先弄清楚什么是基数排序，基数排序就是按位数排序，先从个位排，把数据分别放到0-9的10个桶里，然后取出数据，再按十位放到10个桶里，以此类推
    /**
     * 对整数数组进行基数排序（最低位优先）
     * 该函数按照数字的每一位（从最低位到最高位）进行多轮桶排序
     * @param {number[]} arr - 待排序的整数数组
     * @returns {number[]} 排序后的升序数组
     */
    function cardinalitySort(arr){
        // 计算最大数字的位数（决定排序轮数）
        const maxLevel = Math.max(...arr).toString().length

        let temp = [...arr]  // 创建数组副本用于排序过程

        // 从最低位到最高位进行多轮排序
        for(let i = 0; i<maxLevel;i++){
            // 创建0-9的数字桶（共10个桶）
            const bucket = Array.from({length:10},_=>[])

            // 将当前数组元素按指定位数分配到桶中
            temp.forEach(item => {
                // 获取当前位的数字（不存在则视为0）
                const numSplit = item.toString().split('').reverse()
                const num = numSplit[i] ? parseInt(numSplit[i]) : 0
                bucket[num].push(item)
            })

            // 按桶顺序（0-9）合并元素形成新数组
            temp = bucket.reduce((acc,cur)=>{
                acc.push(...cur)
                return acc
            },[])
        }
        return temp
    }

    const arr = [73, 22, 93, 43, 55, 14, 28, 65, 39, 81]
    console.log(cardinalitySort(arr))
</script>
</html>